\documentclass[graphicx=pdftex]{beamer}
%\setbeamertemplate{navigation symbols}{}


%\usepackage{default}
%\usepackage{beamerthemesplit}
\usepackage{beamerthemeBoadilla}
%\usetheme{Berkeley}
%\usecolortheme{whale}
%\setbeamercolor*{titlelike}{use=structure,fg=structure.fg}

\newlength{\minilongueur}
\newenvironment{FramedBoxShadow}
{\setlength{\fboxsep}{15pt} \setlength{\minilongueur}{\linewidth}
\addtolength{\minilongueur}{-2\fboxsep}
\addtolength{\minilongueur}{-2\fboxrule} \Sbox
\minipage{\minilongueur}
 \setlength{\abovedisplayskip}{0pt}
\setlength{\belowdisplayskip}{0pt} }
{\endminipage\endSbox\[\shadowbox{\TheSbox}\]}

%\useoutertheme[height=0pt, width=50pt]{sidebar}
%\useoutertheme[height=0pt, width=50pt]{miniframes}

\usepackage{listings}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{amsmath}
\usepackage{subfigure}
\usepackage{fancyhdr}
\usepackage{fancybox}
\usepackage{placeins}
\usepackage{url}

% Pour le code style Java
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{greenComment}{rgb}{0.215,0.643,0.305}
\definecolor{purpleKeyWord}{rgb}{0.64,0,0.55}
\definecolor{grayBackCode}{gray}{0.95}


\lstset{language=java}
\lstset{basicstyle=\scriptsize,showspaces=false}
\lstset{backgroundcolor=\color{white}, rulecolor=\color{black}}
\lstset{commentstyle=\scriptsize \color{greenComment} \textit }
\lstset{stringstyle=\scriptsize \color{blue}, ,showstringspaces=false,stringspaces=false  }
\lstset{keywordstyle=\scriptsize  \color{purpleKeyWord} \bfseries  }
\lstset{identifierstyle=\scriptsize}
\lstset{tabsize=2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\setbeamertemplate{navigation symbols}
{%
  %\vbox{}
}




\title{Ajout d'OTE dans un RTOS}
\subtitle{Trvail de Bachelor}
\date{25 août 2009}
\author{Lucien Chaubert}

\institute{MIS @ HEIG-VD}

%Pour le numero de page en footer
%\setbeamertemplate{footline}[frame number]

\begin{document}

% \AtBeginSection[]{
%   \begin{frame}{Sommaire}
%   \small \tableofcontents[currentsection, hideothersubsections]
%   \end{frame} 
% }

% Sommaire local. En deux colonnes
\AtBeginSection[]{
\begin{frame}{Sommaire}
  \begin{columns}[t]
  \begin{column}{5cm}
  \tableofcontents[sections={1-4},currentsection, hideothersubsections]
  \end{column}
  \begin{column}{5cm}
  \tableofcontents[sections={5-8},currentsection,hideothersubsections]
  \end{column}
  \end{columns}
\end{frame}
}

\begin{frame}
%Création du titre

\begin{center}
\begin{tabular}{lr}
\includegraphics[scale=0.06]{../Imgs/HEIG-VD.png} & \includegraphics[scale=0.3]{../Imgs/logo_MIS.png}\\
\end{tabular}
\end{center}



%\begin{FramedBoxShadow}
\begin{block}{}
\begin{center}
\begin{LARGE} 
\textbf{Modification de l'ordonnancement d'un système d'exploitation open-source}
\end{LARGE}
\end{center}
\end{block}
%\end{FramedBoxShadow}

\vspace{1cm}
\normalsize
\begin{center}
\begin{tabular}{ll}
Étudiant :&Lucien Chaubert\\
Promotion :&IL2009\\
Responsable:&Claude Evequoz
\end{tabular}
\end{center}


\begin{center}
\vspace{0.6cm}    
Présentation du 25 août 2009 \\
\end{center}


\end{frame}


\section{Introduction}
\begin{frame}
 \frametitle{Introduction}
  \begin{block}{Économie d'énergie?}
    \begin{itemize}
      \item Prise de conscience écologique générale.
      \item Prix de l'énergie en hausse.
      \item Augmenter l'autonomie d'un appareil mobile.     
			\item Réduire les pertes calorifiques $\Rightarrow$ économie
supplémentaire d'énergie.
    \end{itemize}
  \end{block}
	\pause
	\begin{block}{Linux?}
    \begin{itemize}
      \item Portable.
      \item Disponibilité de pilotes matériel.
      \item Gratuit.
      \item Fiable.
    \end{itemize}
  \end{block}
\end{frame}


\begin{frame}
  \begin{block}{Ordonnanceur d'un système temps réel?}
    \begin{itemize} 
      \item Une voiture qui consomme 2 fois moins mais qui utilise un chemin 2
fois plus long.
      \item Un système temps réel strict, par sa nature déterministe,
permet de réduire efficacement la consommation car le comportement de ses tâches
sont prévisibles.
    \end{itemize}
  \end{block}
  \pause
  \begin{block}{Cible?}
    \begin{itemize} 
      \item Les ultra-portables.
      \item Tout système ayant une architecture suffisante pour charger une distribution à base de
noyau Linux.
      \item Pas le même domaine que ZottaOS.
    \end{itemize}
  \end{block}
\end{frame}







 \section{Problématique}
% 
% \begin{frame}
% \frametitle{Problématique}
% 	\begin{columns}[c]
%   	\begin{column}{5.5cm}
%  			\begin{block}{Les systèmes temps réel}
%     		\begin{itemize}
%       		\item Ordonnanceurs :
%       			\begin{itemize}
% 							\item FIFO
% 							\item RR 
% 							\item RMS 
% 							\item EDF
% 							\item Autres
%       		\end{itemize}
%       		\item Tâche :
%       		\begin{itemize}
% 						\item Période
% 						\item Priorité
% 						\item Échéance
% 						\item WCET
% 						\item (Prochaine exécution)
%       		\end{itemize}
%     		\end{itemize}
% 			\end{block}
%   	\end{column}
%   \begin{column}{5.5cm}
%  		\begin{block}{EDF  (priorité dynamique)}
% 			\centering      
%     	Échéance $\leqq$ prochaine exécution.
%       	\begin{figure}[h!]
%       		\includegraphics[scale=0.5]{../Imgs/EDF.png}
%      	 		% EDF.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
%      	 		\label{fig:Ordonnancement avec échéance = prochaine exécution}
%      	 \end{figure}
%  		 \end{block}
% 		 \begin{block}{RM (priorité statique)}
% 		 	\centering
%     	Échéance = prochaine exécution 
%       \begin{figure}[h!]
%       	\includegraphics[scale=0.5]{../Imgs/RM.png}
%       	% EDF.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
%       	\label{fig:Ordonnancement avec échéance = prochaine exécution}
%       \end{figure}
%   \end{block}
%   \end{column}
% \end{columns}
% \end{frame}

\begin{frame}
 \frametitle{Baisse de tension $\Rightarrow$ Économie d'énergie}
  \begin{block}{Relation entre tension, fréquence et énergie}
   \begin{itemize}
	 	\item F et U  $\propto$ linéaire.
    \item $P [W] \propto U^{2} \times F$
   \end{itemize}
  \end{block}
	\begin{figure}[h!]
		\centering
		\includegraphics[scale=0.15]{../Imgs/SchemaVoltEnergie.png}
			% SchemaBaisseFrequence.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
	\end{figure}
\end{frame}

\begin{frame}
 \frametitle{Baisse de tension $\Rightarrow$ baisse de fréquence}
  \begin{block}{Extension de la durée des tâches}
   \begin{itemize}
    \item Minimiser la fréquence du CPU en maximisant la durée des tâches en
respectant leurs échéances.
   \end{itemize}
  \end{block}
	\begin{figure}[h!]
		\centering
		\includegraphics[scale=0.6]{../Imgs/SchemaBaisseFrequence.png}
			% SchemaBaisseFrequence.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
	\end{figure}
\end{frame}

\begin{frame}
	\frametitle{Baisse de tension $\Rightarrow$ Économie d'énergie}
	\begin{columns}[t]
		\begin{column}{5.7cm}
			\begin{block}{Vitesse max et veille}
				\begin{itemize}
					\item Fréquence max $\rightarrow$ veille. 
				\end{itemize}
			\end{block}
			\begin{figure}[h!]
				\centering
				\includegraphics[scale=0.15]{../Imgs/StopEnergie.png}
				% StopEnergie.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
			\end{figure}
		\end{column}
		
		\begin{column}{5.7cm}
			\begin{block}{OTE}
				\begin{itemize}
					\item Fréquence divisée par 2. 
					\item Durée multipliée par 2.
				\end{itemize}
			\end{block}
			\begin{figure}[h!]
				\centering
				\includegraphics[scale=0.233]{../Imgs/EnergieOTE.png}
				% EnergieOTE.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
			\end{figure}
		\end{column}
	\end{columns}

\end{frame}




\section{Linux et le temps réel}
\begin{frame}
 \frametitle{Linux et le temps réel}
  \begin{block}{Le noyau Linux}
  	\begin{itemize}
    	\item Destiné à un usage interactif. %Doit répondre rapidement en
% front (RR)
      	\begin{itemize}
					\item Accent sur débit de traitement %(perte de temps en réordonnancement et en changement de contextes)
					\item Perte en temps de réponse
      	\end{itemize}
			\item Préemption du noyau impossible $\rightarrow$ version 2.2
			\item Possible depuis 2.4 ($\geqq$ 100ms) % grande section critique
			\item Depuis 2.6 ajout de point de préemption ($\approx$ 1ms) 
  	\end{itemize}
  \end{block}
	\begin{figure}[h!]
		\centering
		\includegraphics[scale=0.2]{../Imgs/CodeNonPremptibleLinux.png}
		% CodeNonPremptibleLinux.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
	\end{figure}
\end{frame}

\subsection{Linux $\rightarrow$ temps réel}
\begin{frame}
	\frametitle{Linux $\rightarrow$ temps réel}
	\begin{block}{Solutions}
  	\begin{itemize}
    	\item Modification de l'ordonnanceur et ajout de points de préemption.
      	\begin{itemize}
					\item Montavista (payant)
					\item Patch RT\_PREEMPT (soft real-time, $\approx$ 200$\mu$s)
      	\end{itemize}
				\item Système minimal ($\mu$CLinux)
				\item Ajout d'un véritable noyau temps réel coopérant avec le noyau
Linux (5 à 10 $\mu$s)
				\begin{itemize}
					\item RTLinux (payant)
					\item RTAI
					\item \textbf{Xenomai}
      	\end{itemize}
  	\end{itemize}
  \end{block}
\end{frame}


\subsection{Partage des ressources matérielles (Adeos)}
\begin{frame}
 \frametitle{Partage des ressources matérielles (Adeos)}
  \begin{block}{Adeos}
  	\begin{itemize}
		\item Partage des ressources matérielles pour plusieurs OS.
    	\item Chaque domaine possède une priorité définie statiquement.
			\item Distribution des événements dans l'ordre des priorités via un
chainage (pipeline).
			\item Protection d'interruptions optimiste.
  	\end{itemize}
  \end{block}
	\begin{figure}[h!]
		\centering
		\includegraphics[scale=0.37]{../Imgs/AdeosPipeline.png}
		% AdeosPipeline.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
	\end{figure}
	\FloatBarrier
\end{frame}

% \begin{frame}
%  \frametitle{Partage des ressources matérielles (Adeos)}
%   \begin{block}{Adeos}
%     \begin{itemize}
%       \item Couche de virtualisation des ressources.
%       \item 4 méthodes de communications entre les OS et le matériel.
%       \begin{figure}[h!]
%         \centering
%         \includegraphics[scale=0.4]{../Imgs/AdeosCommunicationHardware.png}
%         % AdeosCommunicationHardware.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
%       \end{figure}
%       \FloatBarrier
%     \end{itemize}
%   \end{block}
%\end{frame}

\subsection{Nano-noyau temps réel (Xenomai)}
\begin{frame}
 \frametitle{Nano-noyau temps réel (Xenomai)}
  \begin{block}{Xenomai}
  	\begin{itemize}
			\item Interface native.
    	\item Émulation d'interfaces de système temps réels propriétaires (Skins).
  	\end{itemize}
  \end{block}
	\begin{figure}[h!]
		\centering
		\includegraphics[scale=0.4]{../Imgs/SkinsXenomai.png}
		% AdeosCommunicationHardware.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
	\end{figure}
	\FloatBarrier
\end{frame}

\begin{frame}
 \frametitle{Nano-noyau temps réel (Xenomai)}
  \begin{block}{Espace d'exécution des tâches}
   	\begin{itemize}
			\item Exécution dans l'espace noyau de Xenomai. %drivers
			\item Exécution dans l'espace utilisateur :
			\begin{itemize}
			 	\item Xenomai. 
				\item \textbf{Linux} (en gardant sa priorité temps réelle).
				% obtenu en bloquant les interruptions par un domaine de
				% priorité supérieure à celle du domaine Linux : le bouclier
				% (shield)
				\item \textbf{Migration automatique} d'un espace utilisateur à l'autre
lors d'un appel système.
			\end{itemize}
  	\end{itemize}
	\end{block}
	\begin{figure}[h!]
		\centering
		\includegraphics[scale=0.3]{../Imgs/MigrationTask.png}
		% AdeosCommunicationHardware.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
	\end{figure}
\end{frame}

\begin{frame}
 \frametitle{Nano-noyau temps réel (Xenomai)}
  \begin{block}{Ordonnanceur}
   	\begin{itemize}
			\item RR (optionnel)
			\item File prioritaire avec traitement des égalités FIFO :			
  	\end{itemize}
	\end{block}
	\begin{figure}[h!]
		\centering
		\includegraphics[scale = 0.7]{../Imgs/SchemaFifo.png}
		% SchemaFifo.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
	\end{figure}
\end{frame}

\begin{frame}
	\frametitle{Ajout d'OTE dans Xenomai}
	\begin{block}{En partant de l'algorithme prioritaire}
		\begin{itemize}
			\item Ajout du WCET (Worst Case Execution Time).
			\item L'échéance $=$ l'heure d'exécution de la prochaine instance de la tâche.
			\item  $\Rightarrow$ Algorithme RMS (Rate Monotonic Scheduling)
			\begin{itemize}
				\item Priorité statique $\Rightarrow$ calcul préalable nécessaire.
			\end{itemize}
      \item Le temps à disposition d'une tâche $=$ date actuelle $-$ date d'arrivée de la prochaine
instance d'une tâche 
		\end{itemize}
	\end{block}
	\begin{figure}[h!]
		\includegraphics[scale=0.5]{../Imgs/RM.png}
		% EDF.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
		\label{fig:Ordonnancement avec échéance = prochaine exécution}
    \caption{Ordonnancement avec échéance = prochaine exécution}
	\end{figure}
\end{frame}



\section{Processeur}
\begin{frame}
 \frametitle{Processeur}
 	\begin{block}{VIA C7 1GHz}
		\begin{itemize}
			\item Compatible X86 $\Rightarrow$ Pléthore de bibliothèques.
			\item 2 PLL $\Rightarrow$ Changement de fréquence pour un court laps de temps.
		\end{itemize}
	\end{block}

	\begin{figure}[h!]
		\centering
		\includegraphics[scale=0.4]{../Imgs/DoublePLL.png}
		% DoublePLL.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
	\end{figure}
\end{frame}

\begin{frame}
    \begin{block}{Problèmes}
    \begin{itemize}
      \item 1 seul régulateur de tension $\Rightarrow$ $\sim50\mu s$ pour passer de 800 à
1000 Mhz.
      \item Datasheet non fourni par VIA.
      \item Informations incomplètes du vendeur.
      \item Seulement 2 fréquences supportées.
    \end{itemize}
  \end{block}
\end{frame}



\section{Algorithme}
\subsection{Problématique}
\begin{frame}
\frametitle{Problématique}
  \begin{block}{Conditions pour une extension}
  \begin{itemize}
    \item Aucune tâche ne doit être en attente d'exécution.
    \item $\Rightarrow$ Certifier que la file des éligibles est vide.
    \item Le temps à disposition $/$ WCET $\geqq$ à un des facteurs de division de fréquence. 
    \item $\Rightarrow$ Obtenir la date de la prochaine tâche allant passer en mode prêt.
    \item $\Rightarrow$ Calculer le ratio : temps à disposition $/$ WCET.
    \item $\Rightarrow$ Trouver le plus grand facteur de division de fréquence $\leqq$ au ratio.
  \end{itemize}
  \end{block}
\end{frame}
  
\begin{frame}
  \begin{block}{Préemption de l'instance d'une tâche}
  \begin{itemize}
    \item Instance préemptée $\Rightarrow$ Temps d'exécution restant $\neq$ WCET.
    \item $\Rightarrow$ Initialiser le temps restant = WCET.
    \item $\Rightarrow$ Ajouter la date du début d'exécution.
    \item $\Rightarrow$ Calculer le temps restant (temps restant -(date actuelle - date du début
d'exécution))
  \end{itemize}
  \end{block}
\end{frame}

\subsection{Pseudocode}
\begin{frame}[fragile]
\frametitle{Pseudocode}
\begin{lstlisting}[frame=trbl]
Temps restant := WCET
A chaque ordonnancement d une tache
  Inserer dans la tache son heure de debut d execution 
  Si la file des taches eligibles est vide
    Reccuperer la tache ayant l heure d arrivee h la plus proche 
    dans la file des arrivees
    Pour tous les facteurs f disponibles, par ordre decroissant
      Si l heure actuel - h >= (f x duree d execution restante)
        Etendre la duree de la tache de f et diminuer la
        frequence et la tension du  processeur selon leurs facteurs
        respectifs
        Sortir de la boucle
      Fin si
    Si aucun facteur n a permis d etendre la duree de la tache 
    tout en respectant son echeance
      Executer la tache avec le processeur a frequence maximum
    Fin si
  Fin si
  Sinon 
    Executer la tache avec le processeur a frequence maximum
  Fin si

Si la tache sortante n a pas fini son execution
  Inserer dans la tache son temps restant d execution
\end{lstlisting}
\end{frame}

\section{Implémentation}
\subsection{Éléments nécessaires}
\begin{frame}
 \frametitle{Éléments nécessaires}
		\begin{block}{Les ordonnanceurs (xnsched\_t)}
      \begin{itemize}
        \item 1 ordonnanceur par CPU
        \item Contient la file des éligibles, la file des arrivées et le thread courant, entre
autre.
      \end{itemize}
    \end{block}
    \pause
    \begin{block}{Les threads (xnthread\_t)}
      \begin{itemize}
        \item $\Rightarrow$ Ajouter le temps restant, le temps de début d'exécution et le WCET.
        \item $\Rightarrow$ Récupérer l'état du thread (savoir si fin d'exécution)
        \item Contient la priorité du thread, son état, le lien sur un objet $timer$
      \end{itemize}
    \end{block}
\end{frame}

\begin{frame}
    \begin{block}{La file des éligibles (readyq)}
      \begin{itemize}
        \item $\Rightarrow$ Savoir si la file est vide.
        \item File contenant une file par priorité du système (0 à 99).
        \item Traitement des égalités FIFO.
      \end{itemize}
    \end{block}    
    \pause
    \begin{block}{File des arrivées (timerqueue)}
      \begin{itemize}
        \item $\Rightarrow$ Récupérer le prochain objet timer allant être déclenché.
        \item File contenant des objets $timer$
        \begin{itemize}
        \item Contient la date de la prochaine instanciation de la tâche.
        \item Contient une routine exécutée par lors du déclenchement du timer matériel.
        \end{itemize}
      \end{itemize}
    \end{block}
  \end{frame}
    
\begin{frame}
    \begin{block}{Thread $root$ et timer $host$}
      \begin{itemize}
        \item Thread nul.
        \item Permet l'exécution du noyau Linux.
        \item Timer $host$ lié au thread $root$.
        \item $\Rightarrow$ Ne pas effectuer de traitement s'il s'agit du thread $root$
      \end{itemize}
    \end{block}
    \pause
    \begin{block}{Changement de fréquence du CPU}
      \begin{itemize}
        \item Instruction assembleur tirée du noyau Linux.
        \item Correspondance tensions$/$fréquences inconnues.
        \item $\Rightarrow$ Lecture de l'état courant, déduction des valeurs possibles.
        \item Changement de 2\% au lieu des 20\% attendu.
      \end{itemize}
    \end{block}
\end{frame}
    
    
\subsection{Éléments pour l'utilisateur}
\begin{frame}
 \frametitle{Éléments pour l'utilisateur}
   \begin{block}{Patchs}
    \begin{itemize}
      \item OTE.
      \item vprintk.
    \end{itemize}
  \end{block}
  \pause
  \begin{block}{Menu de configuration}
    \begin{itemize}
      \item Option OTE.
      \item Option Debug OTE.
    \end{itemize}
  \end{block}
  \pause
  \begin{block}{API}
    \begin{itemize}
      \item Ajout du WCET dans l'interface native de Xenomai.
      \item Assignation des priorités et de la période inchangée.
    \end{itemize}
  \end{block}
\end{frame}
    
\subsection{Méthodes et problèmes}
\begin{frame}
 \frametitle{Méthodes et problèmes}
	\begin{block}{Recherche des éléments nécessaires dans Xenomai}
		\begin{itemize}
			\item Lire l'API du noyau Xenomai.
			\item Connaître dans quel fichier se situe quel type de fonction.
			\item Suivre les liens des appels et pointeurs.
			\item Trouver une fonction qui pourrait utiliser le code qu'on recherche.
			\item ``printk()''
		\end{itemize}
	\end{block}
  
	\begin{block}{Problèmes}
		\begin{itemize}
			\item Beaucoup de code.
			\item Commentaire rare.
			\item Documentation autre que celle de l'API inexistante.
			\item Pas de débogueur.
			\item Pièges des ifdef.
		\end{itemize}
	\end{block}
\end{frame}

\subsection{Ajouts possibles}
\begin{frame}
 \frametitle{Ajouts possibles}
  \begin{block}{Quelques idées}
    \begin{itemize}
      \item Vérifier que le code marche pour toutes les optimisations de
Xenomai. (ifdef).
      \item Créer une librairie de CPU.
      \item Modifier les autres Skins de Xenomai pour prendre en compte le WCET.
      \item Intégrer le projet au projet Xenomai.
    \end{itemize}
  \end{block}
\end{frame}

\section{Conclusion}
\begin{frame}
 \frametitle{Conclusion}
	\begin{block}{Xenomai}
		\begin{itemize}
			\item Respect du temps réel.
			\item Utilisation des librairies Linux $\Rightarrow$ Réutilisation de code
accrue.
			\item Complexe à appréhender.
		\end{itemize}
	\pause	
	\end{block}
		\begin{block}{Via}
		\begin{itemize}
			\item CPU permettant d'utiliser OTE de façon optimale même si pas autant que désiré.
			\item Constructeur non coopératif découlant sur une utilisation non convaincante du matériel.
		\end{itemize}
	\end{block}
  \pause  
  \begin{block}{Projet}
    \begin{itemize}
      \item Fonctionnel
      \item Nécessite encore du travail (CPU, intégration, ...) 
      \item Open source
    \end{itemize}
  \end{block}
\end{frame}



\section{Questions}
\begin{frame}
 	\vspace{2cm}
	\begin{block}{}
		\huge{\begin{center}Questions ?\end{center}}
 	\end{block}
 	\vspace{3cm}
 	\begin{center}
 	Retrouver le projet ainsi que sa documentation
	sur \url{http://xenomaiote.googlecode.com}
	\end{center}
	
\end{frame}

\end{document}
